/* ========================================================================= */
/* ------------------------------------------------------------------------- */
/*!
  \file			cmndata.cc
  \date			Feb 2012
  \author		TNick

  \brief		Contains the implementation of CmnData class


*//*


 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Please read COPYING and README files in root folder
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
/* ------------------------------------------------------------------------- */
/* ========================================================================= */
//
//
//
//
/*  INCLUDES    ------------------------------------------------------------ */

#include	<stdlib.h>
#include	<objdeflib_internal.h>
#include	<session.h>

#include	"cmndata.h"


/*  INCLUDES    ============================================================ */
//
//
//
//
/*  DEFINITIONS    --------------------------------------------------------- */

using namespace	ObjD;

/*  DEFINITIONS    ========================================================= */
//
//
//
//
/*  DATA    ---------------------------------------------------------------- */

/*  DATA    ================================================================ */
//
//
//
//
/*  CLASS    --------------------------------------------------------------- */



/* ------------------------------------------------------------------------- */
void			CmnData::init			(
		const char * s_name, Session * ses )
{
	if ( ses == NULL )
		ses = def_ss;
	templ_ = NULL;
	unsigned	u_idx;
	p_name_a_ = ses->addName( s_name, u_idx );
	p_descr_a_ = NULL;
	flg_ = FLG_NAME_MINE ;
	return;
}
/* ========================================================================= */

///* ------------------------------------------------------------------------- */
//CmnData *			CmnData::init			( CmnData * tpl )
//{
//	return NULL;
//}
///* ========================================================================= */

///* ------------------------------------------------------------------------- */
//CmnData *			CmnData::init			( QString s_name )
//{
//	return NULL;
//}
///* ========================================================================= */

///* ------------------------------------------------------------------------- */
//CmnData *			CmnData::init			( QString s_name, QString s_descr )
//{
//	return NULL;
//}
///* ========================================================================= */

///* ------------------------------------------------------------------------- */
//CmnData *			CmnData::init			( const char * s_name, const char * s_descr )
//{
//	return NULL;
//}
///* ========================================================================= */




/* ------------------------------------------------------------------------- */
void				CmnData::discard		( void )
{
	if ( ownsName() )
	{
		free( p_name_a_ );
		p_name_a_ = NULL;
	}

	if ( ownsDescr() )
	{
		free( p_descr_a_ );
		p_descr_a_ = NULL;
	}

	CmnData * kiter = static_cast<CmnData *>( firstKid() );
	while ( kiter != NULL )
	{
		kiter->discard();
		kiter = static_cast<CmnData *>( kiter->next() );
	}

	if ( isIndependent() )
	{
		free( this );
	}
}
/* ========================================================================= */

/* ------------------------------------------------------------------------- */
QChar*				CmnData::pName			( quint32 & n_len )
{
	n_len = (quint32) p_name_a_->unicode();
	return p_name_a_ + 1;
}
/* ========================================================================= */

/* ------------------------------------------------------------------------- */
QString				CmnData::name			( void )
{
	return QString( p_name_a_ + 1, p_name_a_->unicode() );
}
/* ========================================================================= */

/* ------------------------------------------------------------------------- */
QChar*				CmnData::pDescr			( quint32 & n_len )
{
	n_len = (quint32) p_descr_a_->unicode();
	return p_descr_a_ + 1;
}
/* ========================================================================= */

/* ------------------------------------------------------------------------- */
QString				CmnData::descr			( void )
{
	return QString( p_descr_a_ + 1, p_descr_a_->unicode() );
}
/* ========================================================================= */




#ifdef	OBJECTSLIB_TESTS

#define	TEST_NAME_	"tst name"
#define	TEST_DESCR_	"tst descr"


/* ------------------------------------------------------------------------- */
void				CmnData_Test_init					(
		 CmnData * tst_i )
{

}
/* ========================================================================= */

/* ------------------------------------------------------------------------- */
void				ObjD::CmnData_Tests					(
		int & performed, int & succeded )
{
	QString		Outcm;
	performed = 0;
	succeded = 0;
	bool		b_ok = false;
	quint32		ui_idx;

	return;

	CmnData * t_1; // = CmnData::init( TEST_NAME_ );
	CmnData * t_2; //  = CmnData::init( TEST_NAME_, TEST_DESCR_ );
	CmnData * t_3; //  = CmnData::init( QString(TEST_NAME_) );
	CmnData * t_4; //  = CmnData::init( QString(TEST_NAME_), QString( TEST_DESCR_) );
	CmnData * t_11; //  = CmnData::init( t_1 );
	CmnData * t_12; //  = CmnData::init( t_2 );
	CmnData * t_13; //  = CmnData::init( t_3 );
	CmnData * t_14; //  = CmnData::init( t_4 );

	for (;;)	{
		if ( t_1->name() != TEST_NAME_ ) break;
		if ( t_2->name() != TEST_NAME_ ) break;
		if ( t_3->name() != TEST_NAME_ ) break;
		if ( t_4->name() != TEST_NAME_ ) break;
		if ( t_11->name() != TEST_NAME_ ) break;
		if ( t_12->name() != TEST_NAME_ ) break;
		if ( t_13->name() != TEST_NAME_ ) break;
		if ( t_14->name() != TEST_NAME_ ) break;

		if ( t_1->descr() != TEST_NAME_ ) break;
		if ( t_2->descr() != TEST_NAME_ ) break;
		if ( t_3->descr() != TEST_NAME_ ) break;
		if ( t_4->descr() != TEST_NAME_ ) break;
		if ( t_11->descr() != TEST_NAME_ ) break;
		if ( t_12->descr() != TEST_NAME_ ) break;
		if ( t_13->descr() != TEST_NAME_ ) break;
		if ( t_14->descr() != TEST_NAME_ ) break;

		if ( t_1->isGeneric() ) break;
		if ( t_2->isGeneric() ) break;
		if ( t_3->isGeneric() ) break;
		if ( t_4->isGeneric() ) break;
		if ( t_11->isGeneric() ) break;
		if ( t_12->isGeneric() ) break;
		if ( t_13->isGeneric() ) break;
		if ( t_14->isGeneric() ) break;

		t_1->setGeneric();
		if ( t_1->isGeneric() == false ) break;
		t_1->resetGeneric();
		if ( t_1->isGeneric() ) break;

		if ( t_1->ownsName() == false ) break;
		if ( t_2->ownsName() == false ) break;
		if ( t_3->ownsName() == false ) break;
		if ( t_4->ownsName() == false ) break;
		if ( t_11->ownsName() == false ) break;
		if ( t_12->ownsName() == false ) break;
		if ( t_13->ownsName() == false ) break;
		if ( t_14->ownsName() == false ) break;

		t_1->resetOwnsName();
		if ( t_1->ownsName() ) break;
		t_1->setOwnsName();
		if ( t_1->ownsName() == false) break;

		if ( t_1->ownsDescr() == false ) break;
		if ( t_2->ownsDescr() == false ) break;
		if ( t_3->ownsDescr() == false ) break;
		if ( t_4->ownsDescr() == false ) break;
		if ( t_11->ownsDescr() == false ) break;
		if ( t_12->ownsDescr() == false ) break;
		if ( t_13->ownsDescr() == false ) break;
		if ( t_14->ownsDescr() == false ) break;

		t_1->resetOwnsDescr();
		if ( t_1->ownsDescr() ) break;
		t_1->setOwnsDescr();
		if ( t_1->ownsDescr() == false) break;

		if ( t_1->isIndependent() == false ) break;
		if ( t_2->isIndependent() == false ) break;
		if ( t_3->isIndependent() == false ) break;
		if ( t_4->isIndependent() == false ) break;
		if ( t_11->isIndependent() == false ) break;
		if ( t_12->isIndependent() == false ) break;
		if ( t_13->isIndependent() == false ) break;
		if ( t_14->isIndependent() == false ) break;

		t_1->resetIndependent();
		if ( t_1->isIndependent() ) break;
		t_1->setIndependent();
		if ( t_1->isIndependent() == false) break;

		if ( t_1->isShadow() ) break;
		if ( t_2->isShadow() ) break;
		if ( t_3->isShadow() ) break;
		if ( t_4->isShadow() ) break;
		if ( t_11->isShadow() ) break;
		if ( t_12->isShadow() ) break;
		if ( t_13->isShadow() ) break;
		if ( t_14->isShadow() ) break;

		t_1->setShadow();
		if ( t_1->isShadow() == false ) break;
		t_1->resetShadow();
		if ( t_1->isShadow() ) break;


		if ( t_1->pName( ui_idx ) == NULL ) break;
		if ( t_2->pName( ui_idx ) == NULL ) break;
		if ( t_3->pName( ui_idx ) == NULL ) break;
		if ( t_4->pName( ui_idx ) == NULL ) break;
		if ( t_11->pName( ui_idx ) == NULL ) break;
		if ( t_12->pName( ui_idx ) == NULL ) break;
		if ( t_13->pName( ui_idx ) == NULL ) break;
		if ( t_14->pName( ui_idx ) == NULL ) break;

		if ( t_1->pDescr( ui_idx ) == NULL ) break;
		if ( t_2->pDescr( ui_idx ) == NULL ) break;
		if ( t_3->pDescr( ui_idx ) == NULL ) break;
		if ( t_4->pDescr( ui_idx ) == NULL ) break;
		if ( t_11->pDescr( ui_idx ) == NULL ) break;
		if ( t_12->pDescr( ui_idx ) == NULL ) break;
		if ( t_13->pDescr( ui_idx ) == NULL ) break;
		if ( t_14->pDescr( ui_idx ) == NULL ) break;


		b_ok = true; break;
	}
	TEST_RESULT( b_ok, "Basic CmnData" );

	t_1->discard();
	t_2->discard();
	t_3->discard();
	t_4->discard();
	t_11->discard();
	t_12->discard();
	t_13->discard();
	t_14->discard();




}
/* ========================================================================= */

#endif

/*  CLASS    =============================================================== */
//
//
//
//
/* ------------------------------------------------------------------------- */
/* ========================================================================= */
